home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / biz / haage / WarpUP_V40Upd.lha / WarpUP-WarpOS / PowerUpEmu / tests / msgtest.c < prev    next >
C/C++ Source or Header  |  1999-04-14  |  5KB  |  184 lines

  1. #include <exec/types.h>
  2. #include <exec/nodes.h>
  3. #include <exec/lists.h>
  4. #include <exec/memory.h>
  5. #include <utility/tagitem.h>
  6. #include <powerup/ppclib/interface.h>
  7. #include <powerup/ppclib/message.h>
  8. #include <powerup/ppclib/tasks.h>
  9. #include <powerup/proto/ppc.h>
  10. #include <proto/exec.h>
  11. #include <proto/dos.h>
  12. #include <stdio.h>
  13. #include <string.h>
  14.  
  15. #define TEXT            "Text sent by M68k processor\n"
  16. #define KILL_ID         0x4b494c4c
  17.  
  18. struct Library    *PPCLibBase;
  19.  
  20.  
  21. int main(void)
  22. {
  23.   struct TagItem    MyTags[10];
  24.   void              *PPCPort;
  25.   void              *M68kPort;
  26.   void              *ReplyPort;
  27.   void              *StartupMsg;
  28.   void              *M68kMsg;
  29.   void              *PPCMsg;
  30.   void              *Object;
  31.   void              *Task;
  32.   UBYTE             *Body;
  33.   void              *MyTimerObject;
  34.  
  35.   printf("Opening ppc.library\n");
  36.   if (PPCLibBase = OpenLibrary("ppc.library", 44))
  37.   {
  38.     printf("Loading PPC object\n");
  39.     if (!(Object  = PPCLoadObject("msgtest.elf"))) {
  40.       printf("Can't load msgtest.elf!\n");
  41.       CloseLibrary(PPCLibBase);
  42.       exit(15);
  43.     }
  44.  
  45.     printf("Creating reply port\n");
  46.     MyTags[0].ti_Tag  = TAG_DONE;
  47.     if (ReplyPort = PPCCreatePort(MyTags))
  48.     {
  49.       if (StartupMsg = PPCCreateMessage(ReplyPort, 0))
  50.       {
  51.         printf("Creating PPC task\n");
  52.         MyTags[0].ti_Tag  = PPCTASKTAG_STARTUP_MSG;
  53.         MyTags[0].ti_Data =(ULONG) StartupMsg;
  54.  
  55.         MyTags[1].ti_Tag  = PPCTASKTAG_STARTUP_MSGDATA;
  56.         MyTags[1].ti_Data = 0;
  57.  
  58.         MyTags[2].ti_Tag  = PPCTASKTAG_STARTUP_MSGLENGTH;
  59.         MyTags[2].ti_Data = 0;
  60.  
  61.         MyTags[3].ti_Tag  = PPCTASKTAG_STARTUP_MSGID;
  62.         MyTags[3].ti_Data = 0;
  63.  
  64.         MyTags[4].ti_Tag  = TAG_DONE;
  65.  
  66.         if (Task = PPCCreateTask(Object, MyTags))
  67.         {
  68.           printf("Allocating memory for message body\n");
  69.           if (Body = PPCAllocVec(sizeof(TEXT), MEMF_PUBLIC))
  70.           {
  71.             printf("Creating message port...\n");
  72.             MyTags[0].ti_Tag  = PPCPORTTAG_NAME;
  73.             MyTags[0].ti_Data =(ULONG) "M68k port";
  74.             MyTags[1].ti_Tag  = TAG_DONE;
  75.  
  76.             if (M68kPort = PPCCreatePort(MyTags))
  77.             {
  78.               printf("Creating message...\n");
  79.               if (M68kMsg = PPCCreateMessage(ReplyPort, sizeof(TEXT)))
  80.               {
  81.                 printf("Obtaining PPC port...\n");
  82.                 MyTags[0].ti_Tag  = PPCPORTTAG_NAME;
  83.                 MyTags[0].ti_Data =(ULONG) "PPC port";
  84.                 MyTags[1].ti_Tag  = TAG_DONE;
  85.  
  86.                 while (!(PPCPort = PPCObtainPort(MyTags)));
  87.  
  88.                 printf("Sending message...\n");
  89.                 strcpy((char *)Body, TEXT);
  90.                 PPCSendMessage(PPCPort,
  91.                                M68kMsg,
  92.                                Body,
  93.                                sizeof(TEXT),
  94.                                0x12345678);
  95.  
  96.                 printf("Waiting for reply...\n");
  97.                 PPCWaitPort(ReplyPort);
  98.  
  99.                 printf("Waiting for PPC message...\n");
  100.                 PPCWaitPort(M68kPort);
  101.  
  102.                 printf("Getting message...\n");
  103.                 if (PPCMsg = PPCGetMessage(M68kPort))
  104.                 {
  105.                   printf("Message: %s", (char *) PPCGetMessageAttr(PPCMsg, PPCMSGTAG_DATA));
  106.                   printf("Reply message...\n");
  107.                   PPCReplyMessage(PPCMsg);
  108.                 }
  109.                 else
  110.                 {
  111.                   printf("Did not get PPC msg\n");
  112.                 }
  113.  
  114.                 printf("Releasing PPC port...\n");
  115.                 PPCReleasePort(PPCPort);
  116.  
  117.                 printf("Waiting for Task Finish Msg...\n");
  118.                 for (;;)
  119.                 {
  120.                   if ((M68kMsg=PPCGetMessage(ReplyPort)) == StartupMsg)
  121.                   {
  122.                     printf("Ahh..the expected Startup=Finish Msg was received.\nNow we can savely free all resources.\n");
  123.                     break;
  124.                   }
  125.                   else
  126.                   {
  127.                     printf("Some non replied Msg 0x%lx was found..wait\n",
  128.                            M68kMsg);
  129.                     PPCWaitPort(ReplyPort);
  130.                   }
  131.                 }
  132.  
  133.                 printf("Deleting message...\n");
  134.                 PPCDeleteMessage(M68kMsg);
  135.               }
  136.               else
  137.               {
  138.                 printf("Could not create msg\n");
  139.                 PPCDeleteTask(Task);
  140.               }
  141.               printf("Deleting message port...\n");
  142.               while (PPCDeletePort(M68kPort) == FALSE);
  143.             }
  144.             else
  145.             {
  146.               printf("Could not create M68k msg port\n");
  147.               PPCDeleteTask(Task);
  148.             }
  149.             printf("Deleting reply port...\n");
  150.             while (PPCDeletePort(ReplyPort) == FALSE);
  151.           }
  152.           else
  153.           {
  154.             printf("Could not alloc mem for msg body\n");
  155.             PPCDeleteTask(Task);
  156.           }
  157.           printf("Freeing message body memory\n");
  158.           PPCFreeVec(Body);
  159.         }
  160.         else
  161.         {
  162.           printf("Could not create PPC task\n");
  163.         }
  164.       }
  165.       else
  166.       {
  167.         printf("Could not create PPC message\n");
  168.       }
  169.     }
  170.     else
  171.     {
  172.       printf("Could not create reply port\n");
  173.     }
  174.     printf("Unloading PPC object\n");
  175.     PPCUnLoadObject(Object);
  176.     printf("Closing ppc.library\n");
  177.     CloseLibrary(PPCLibBase);
  178.   }
  179.   else
  180.   {
  181.     printf("Could not open ppc.library v44+\n");
  182.   }
  183. }
  184.